#!/usr/bin/python3
# -*-coding:utf-8 -*

"""  Fichier regroupant les fonctions, classes de gestion de l'affichage du jeu """


#### IMPORT
from pygame import init
from pygame.display import set_mode,flip,set_caption,update

from config import WINDOW_HEIGHT,WINDOW_WIDTH,WINDOW_BACKGROUND,WINDOW_TITLE
from config import MAP_MAX_LAYER,PLAYER_LAYER

class View(object):

    """
        Classe de gestion de l'affichage du jeu
        
        Paramètres:
        Surface window - fenetre du jeu
        Map map - carte du jeu
        Player player - joueur
        
    """

    def __init__(self):
        """  Constructeur de la classe  """
        # Initialisation des modules importées
        init()
        # GESTION DE LA FENETRE PRINCIPAL
        # Initialisation et affichage de la fenetre
        self.window=set_mode((WINDOW_HEIGHT,WINDOW_WIDTH))
        # Couleur de fond de la fenêtre
        self.window.fill(WINDOW_BACKGROUND)
        # Titre de la fenêtre
        set_caption(WINDOW_TITLE)

    def addElementGame(self,map,sprite):
        """ 
            Méthode d'ajout des éléments du jeu à la vu
            
            Paramètres nommés:
            Map map - carte du jeu
            Player sprite - joueur
        
        """
        self.map=map
        self.player=sprite

    def init(self):
        """ Initialisation de la carte """
        # Mise à jour de l'image de la fenetre
        self.__updateWindow()
        # Mise a jour de tout l'écran
        flip()
        #update()


    def update(self):
        """
            Méthode de mise à jour de la fenetre du jeu
        """
        # TODO Gestion du scrooling
        # Détection de la zone qui à changer
        oldRect,newRect=self.player.oldRect,self.player.rect
        # Suppression de l'ancienne zone
        # ?
        # Mise à jour de l'image de la fenetre
        self.__updateWindow()
        # Mise à jour de l'écran
        update([self.player.vision])
        #update([oldRect,newRect])


    def __updateWindow(self):
        """ Méthode de mise à jour de la fenetre principal """
        self.__buildMap(range(PLAYER_LAYER))
        self.window.blit(self.player.image,self.player.rect)
        self.__buildMap([ x for x in range(MAP_MAX_LAYER) if x>=PLAYER_LAYER])


    def __buildMap(self,listLevel):
        """ 
            Méthode de mise à jour de la fenetre pricipale
            
            Paramètre nommée
            list listLevel - liste des niveaux de l'image désiré
        
        """
        # Récupération des images à mettre à jour
        dictImage=self.map.loadImage(listLevel)
        # Ajout à la fenetre pricipale
        for coord,surface in dictImage.items():
            self.window.blit(surface,coord)
